'use strict';

// function sortWords(words) {
//   const newWords = [];
//   if (words === null || words?.length == 0) {
//     return newWords;
//   } else {
//     for (let i = 0; i < words.length; i++) {
//       const ele = words[i];
//       // 拆字母重新排序放入新数组中
//       newWords.push(ele.split('').sort().join(''));
//     }
//     return newWords;
//   }
// }

// function groupWords(words) {
//   const sortedWords = sortWords(words);
//   const finalWords = [];
//   const pops = new Array(words.length).fill(false);

//   for (let i = 0; i < sortedWords.length; i++) {
//     // 如果字符已处理过，则跳过
//     if (pops[i]) continue;
//     // 向小组中添加字符元素
//     const group = [];
//     group.push(words[i]);

//     for (let j = i + 1; j < sortedWords.length; j++) {
//       // 相等则放入数组，并且把对应的pops值设为true
//       if (sortedWords[j] == sortedWords[i]) {
//         group.push(words[j]);
//         pops[j] = true;
//       }
//     }
//     finalWords.push(group);
//   }
//   return finalWords;
// }

// function sortWords(words) {
//   const sortedWordsMap = new Map();

//   if (words === null || words?.length == 0) {
//     return sortedWordsMap;
//   } else {
//     for (let i = 0; i < words.length; i++) {
//       const ele = words[i];
//       // 拆字母重新排序放入新数组中
//       const sortedWord = ele.split('').sort().join('');
//       if (sortedWordsMap.has(sortedWord)) {
//         sortedWordsMap.get(sortedWord).push(ele);
//       } else {
//         sortedWordsMap.set(sortedWord, [ele]);
//       }
//     }
//     return sortedWordsMap;
//   }
// }

// function groupWords(words) {
//   const sortedWordsMap = sortWords(words);
//   const finalWords = [];

//   sortedWordsMap.forEach((value) => {
//     finalWords.push(value);
//   });

//   return finalWords;
// }

var groupAnagrams = function (strs) {
  const map = new Map();
  for (let str of strs) {
    let array = Array.from(str);
    array.sort();
    let key = array.toString();
    let list = map.get(key) ? map.get(key) : new Array();
    list.push(str);
    map.set(key, list);
  }
  return Array.from(map.values());
};

const strs = ['eat', 'tea', 'tan', 'ate', 'nat', 'bat'];
console.log(groupAnagrams(strs));
